From 4e9356f339fc4a6a6c215b73e4a5d768cf79963d Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 25 Nov 2013 03:46:25 +0100 Subject: [PATCH] menu: Do a proper min height request The minimum height is the size of one menu item plus the arrows, not the minimum size of all menu items. https://bugzilla.gnome.org/show_bug.cgi?id=691974 https://bugzilla.gnome.org/show_bug.cgi?id=694859 --- gtk/gtkmenu.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index 6754565bc8..d9cb6482fe 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -3273,18 +3273,19 @@ gtk_menu_get_preferred_height_for_width (GtkWidget *widget, gint *minimum_size, gint *natural_size) { - GtkBorder padding; + GtkBorder padding, arrow_border; GtkMenu *menu = GTK_MENU (widget); GtkMenuPrivate *priv = menu->priv; guint *min_heights, *nat_heights; guint border_width; gint n_heights, i; - gint min_height, nat_height; + gint min_height, single_height, nat_height; border_width = gtk_container_get_border_width (GTK_CONTAINER (menu)); get_menu_padding (widget, &padding); min_height = nat_height = (2 * border_width) + padding.top + padding.bottom; + single_height = 0; n_heights = calculate_line_heights (menu, for_size, &min_heights, &nat_heights); @@ -3292,9 +3293,16 @@ gtk_menu_get_preferred_height_for_width (GtkWidget *widget, for (i = 0; i < n_heights; i++) { min_height += min_heights[i]; + single_height = MAX (single_height, min_heights[i]); nat_height += nat_heights[i]; } + get_arrows_border (menu, &arrow_border); + single_height += (2 * border_width) + + padding.top + padding.bottom + + arrow_border.top + arrow_border.bottom; + min_height = MIN (min_height, single_height); + if (priv->have_position) { GdkScreen *screen = gtk_widget_get_screen (priv->toplevel); -- 2.30.2